/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package UI;

import Excepciones.FechaIncorrectaException;
import Excepciones.FechaInferiorException;
import Logica.Reunion;
import Logica.Usuario;
import Manejadores.ManejadorActualizarAccion;
import Persistencia.Singleton_Sesion;
import java.util.Iterator;
import javax.swing.JOptionPane;

/**
 *
 * @author NachoB Clase Interfaz que contiene el aspecto y objetos visuales
 * necesarios para realizar una actualizacion de accion y el agregado de
 * comentarios.
 */
public class IActualizarAccion extends javax.swing.JFrame {

    private int codAccion;
    private String nombreAccion;
    private int estado;
    private String usuario;
    private String fecha;
    private Singleton_Sesion sesion;
    ManejadorActualizarAccion maa = new ManejadorActualizarAccion();

    public int getCodAccion() {
        return codAccion;
    }

    public String getNombreAccion() {
        return nombreAccion;
    }

    public int getEstado() {
        return estado;
    }

    public String getUsuario() {
        return usuario;
    }

    public String getFecha() {
        return fecha;
    }
    
    public void setUsuario(String usuario) {
        this.usuario = usuario;
        cbUsuario.setSelectedItem(usuario);
    }
    public void setReunion(String reunion){
        cbReunion.setSelectedItem(reunion);
    }
    
    public void setProyecto(String proy){
        txtProyecto.setText(proy);
        this.cargarUsuarios(proy);
        this.cargarReunion(proy);
    }            

    public void setFecha(String fecha) {
        this.fecha = fecha;
        txtFechaVen.setText(fecha);
    }

    public void setCodAccion(int codAccion) {
        this.codAccion = codAccion;
    }

    public void setNombreAccion(String nombreAccion) {
        this.nombreAccion = nombreAccion;
        txtNombre.setText(nombreAccion);
    }

    public void setEstado(int estado) {
        this.estado = estado;
        cbEstado.setSelectedIndex(estado);
    }
    
    public void setDescripcion(String desc)
    {
        txtaDescripcion.setText(desc);
    }
    
    public void setProyecto()
    {
        //txtProyecto.setText(maa.obtenerNombreProyecto());
    }

    public IActualizarAccion() {
        initComponents();        
        this.darFormatoATexto();
        sesion = Singleton_Sesion.getInstancia();
        if (sesion.getUsuarioLogueado() != null) {
            this.setTitle(this.getTitle()+ " - " + sesion.getUsuarioLogueado().getNombreUsuario());
        }

    }

    //Metodo para cargar los usuarios existentes en la base de datos en un combobox
    public void cargarUsuarios(String proy) {
        this.cbUsuario.removeAllItems();
        Iterator iter = maa.iterUsuarios(proy);
        while (iter.hasNext()) {
            Usuario usr = (Usuario) iter.next();
            this.cbUsuario.addItem(usr.getNombreUsuario());
        }        
    }
    
    public void cargarReunion(String proy){
        this.cbReunion.removeAllItems();
        Iterator iter = maa.iterReunion(proy);
        while (iter.hasNext()){
            Reunion re = (Reunion) iter.next();
            this.cbReunion.addItem(re.getNombre());
        }
    }

    //Metodo para que el textbox de fecha, posea el formato de fecha dd-mm-aaaa
    public void darFormatoATexto() {
        try {
            txtFechaVen.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.MaskFormatter("##-##-####")));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        lblNombre = new javax.swing.JLabel();
        txtNombre = new javax.swing.JTextField();
        lblComentario = new javax.swing.JLabel();
        jScrollPane1 = new javax.swing.JScrollPane();
        txtaComentario = new javax.swing.JTextArea();
        lblEstado = new javax.swing.JLabel();
        cbEstado = new javax.swing.JComboBox();
        btnGuardar = new javax.swing.JButton();
        btnCancelar = new javax.swing.JButton();
        btnAgregar = new javax.swing.JButton();
        lblResultadoComentario = new javax.swing.JLabel();
        jScrollPane2 = new javax.swing.JScrollPane();
        txtaColeccion = new javax.swing.JTextArea();
        lblComentariosAgregados = new javax.swing.JLabel();
        lblUsuario = new javax.swing.JLabel();
        cbUsuario = new javax.swing.JComboBox();
        lblFechaVencimiento = new javax.swing.JLabel();
        txtFechaVen = new javax.swing.JFormattedTextField();
        lbl_proyecto = new javax.swing.JLabel();
        txtProyecto = new javax.swing.JTextField();
        btnVerComentarios = new javax.swing.JButton();
        jLabel1 = new javax.swing.JLabel();
        cbReunion = new javax.swing.JComboBox();
        lblDescripcion = new javax.swing.JLabel();
        jScrollPane3 = new javax.swing.JScrollPane();
        txtaDescripcion = new javax.swing.JTextArea();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        setTitle("Actualizar acción");
        setMaximizedBounds(new java.awt.Rectangle(0, 0, 474, 546));
        setMinimumSize(new java.awt.Dimension(474, 546));
        setResizable(false);

        lblNombre.setText("Nombre:");

        lblComentario.setText("Comentario:");

        txtaComentario.setColumns(20);
        txtaComentario.setRows(5);
        jScrollPane1.setViewportView(txtaComentario);

        lblEstado.setText("Estado:");

        cbEstado.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Cerrada", "Abierta" }));

        btnGuardar.setText("Guardar");
        btnGuardar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnGuardarActionPerformed(evt);
            }
        });

        btnCancelar.setText("Cancelar");
        btnCancelar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnCancelarActionPerformed(evt);
            }
        });

        btnAgregar.setText("Agregar Comentario");
        btnAgregar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnAgregarActionPerformed(evt);
            }
        });

        txtaColeccion.setColumns(20);
        txtaColeccion.setRows(5);
        txtaColeccion.setEnabled(false);
        jScrollPane2.setViewportView(txtaColeccion);

        lblComentariosAgregados.setText("Comentarios Agregados:");

        lblUsuario.setText("Usuario a cargo:");

        cbUsuario.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));

        lblFechaVencimiento.setText("Vencimiento:");

        txtFechaVen.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyTyped(java.awt.event.KeyEvent evt) {
                txtFechaVenKeyTyped(evt);
            }
        });

        lbl_proyecto.setText("Proyecto:");

        txtProyecto.setEnabled(false);

        btnVerComentarios.setText("Ver Comentarios de la accion");
        btnVerComentarios.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnVerComentariosActionPerformed(evt);
            }
        });

        jLabel1.setText("Reunion:");

        cbReunion.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));

        lblDescripcion.setText("Descripcion");

        txtaDescripcion.setColumns(20);
        txtaDescripcion.setRows(5);
        jScrollPane3.setViewportView(txtaDescripcion);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap(40, Short.MAX_VALUE)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(lblComentario)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(layout.createSequentialGroup()
                                .addGap(14, 14, 14)
                                .addComponent(btnAgregar, javax.swing.GroupLayout.PREFERRED_SIZE, 163, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addGap(18, 18, 18)
                                .addComponent(btnVerComentarios)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 17, javax.swing.GroupLayout.PREFERRED_SIZE))
                            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                                .addComponent(jScrollPane1)
                                .addComponent(lblComentariosAgregados)
                                .addComponent(lblResultadoComentario, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 383, Short.MAX_VALUE)
                                .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                                    .addGap(105, 105, 105)
                                    .addComponent(btnGuardar)
                                    .addGap(27, 27, 27)
                                    .addComponent(btnCancelar)
                                    .addGap(101, 101, 101))))
                        .addGroup(layout.createSequentialGroup()
                            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                .addComponent(lblUsuario)
                                .addComponent(lblNombre)
                                .addComponent(lbl_proyecto))
                            .addGap(18, 18, 18)
                            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                                .addComponent(txtProyecto, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.PREFERRED_SIZE, 85, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addComponent(cbUsuario, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.PREFERRED_SIZE, 85, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addComponent(txtNombre, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.PREFERRED_SIZE, 85, javax.swing.GroupLayout.PREFERRED_SIZE))
                            .addGap(31, 31, 31)
                            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                .addComponent(lblFechaVencimiento)
                                .addComponent(lblEstado)
                                .addComponent(jLabel1))
                            .addGap(18, 18, 18)
                            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                                .addComponent(cbEstado, 0, 91, Short.MAX_VALUE)
                                .addComponent(txtFechaVen, javax.swing.GroupLayout.DEFAULT_SIZE, 91, Short.MAX_VALUE)
                                .addComponent(cbReunion, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
                        .addComponent(lblDescripcion)
                        .addComponent(jScrollPane3)))
                .addGap(35, 35, 35))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(lbl_proyecto)
                    .addComponent(txtProyecto, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabel1)
                    .addComponent(cbReunion, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(cbEstado, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(lblEstado)
                    .addComponent(lblUsuario)
                    .addComponent(cbUsuario, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(lblFechaVencimiento)
                    .addComponent(lblNombre)
                    .addComponent(txtNombre, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(txtFechaVen, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(18, 18, 18)
                .addComponent(lblDescripcion)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jScrollPane3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 13, Short.MAX_VALUE)
                .addComponent(lblComentario)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(btnAgregar)
                    .addComponent(btnVerComentarios))
                .addGap(18, 18, 18)
                .addComponent(lblComentariosAgregados)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(lblResultadoComentario, javax.swing.GroupLayout.PREFERRED_SIZE, 22, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(btnGuardar)
                    .addComponent(btnCancelar))
                .addContainerGap())
        );

        java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
        setBounds((screenSize.width-474)/2, (screenSize.height-663)/2, 474, 663);
    }// </editor-fold>//GEN-END:initComponents

    private void btnCancelarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnCancelarActionPerformed
        //Cierra la ventana actual limpiando el comentario del label, el textArea de comentarios y la lista de comentarios en accion (mediante el objeto creado con su ID).
        try {
            maa.limpiarLista();
        } catch (Exception e) {
        };

        lblResultadoComentario.setText("");
        txtaComentario.setText("");
        this.dispose();
    }//GEN-LAST:event_btnCancelarActionPerformed

    private void btnGuardarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnGuardarActionPerformed
        //metodo que actualiza la accion y añade comentarios a la misma, comprobando las validaciones necesarias en sus datos y particularmente en las fechas.
        if (txtFechaVen.equals("") || txtNombre.equals("")) {
            JOptionPane.showMessageDialog(null, "Por favor complete todos los campos para actualizar la acción");
        } else {
            try {
                /*estado = cbEstado.getSelectedIndex();
                nombreAccion = txtNombre.getText();
                usuario = cbUsuario.getSelectedItem().toString();
                fecha = txtFechaVen.getText().trim();
                if (maa.actualizar(codAccion, estado, nombreAccion, usuario, fecha)) {*/
                if (maa.actualizar(codAccion, this.cbEstado.getSelectedIndex(), estado, this.txtNombre.getText(), this.cbUsuario.getSelectedItem().toString(), this.txtFechaVen.getText().trim(), this.txtaDescripcion.getText(), cbReunion.getSelectedItem().toString()))
                {
                    JOptionPane.showMessageDialog(null, "Accion Actualizada con éxito.");
                    this.dispose();
                } else {
                    JOptionPane.showMessageDialog(null, "Error al Actualizar (revise si la fecha es correcta (dd-mm-aaaa)");
                }
                lblResultadoComentario.setText("");

            } catch (FechaIncorrectaException fine) {
                JOptionPane.showMessageDialog(null, fine.toString(), "Error en la Fecha", JOptionPane.ERROR_MESSAGE);
            } catch (Exception e) {
                JOptionPane.showConfirmDialog(null, e.getMessage(), "Error en alguno de los campos", JOptionPane.ERROR_MESSAGE);
                e.printStackTrace();
            }
        }



    }//GEN-LAST:event_btnGuardarActionPerformed

    private void btnAgregarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnAgregarActionPerformed
        //Este metodo permite agregar comentarios a una lista de comentarios en la clase accion, los cuales luego podran ser añadidos al guardar la transaccion.
        //Valido si el text Area contiene texto.
        if (txtaComentario.getText().equals("")) {
            lblResultadoComentario.setText("Complete el Area antes de agregar");
        } else {
            txtaColeccion.setText(maa.agregarComentario(txtaComentario.getText(), codAccion));
            lblResultadoComentario.setText("¡Comentario agregado con éxito!");
            txtaComentario.setText("");
        }


    }//GEN-LAST:event_btnAgregarActionPerformed

    private void txtFechaVenKeyTyped(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_txtFechaVenKeyTyped
        char caracter = evt.getKeyChar();
        if (((caracter < '0')
                || (caracter > '9'))
                && (caracter != evt.VK_BACK_SPACE)) {
            evt.consume();
        }
    }//GEN-LAST:event_txtFechaVenKeyTyped

    private void btnVerComentariosActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnVerComentariosActionPerformed
        IComentarios ic=new IComentarios();        
        ic.setNombre(txtNombre.getText(), codAccion, txtaColeccion.getText());
        ic.setVisible(true);
    }//GEN-LAST:event_btnVerComentariosActionPerformed

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btnAgregar;
    private javax.swing.JButton btnCancelar;
    private javax.swing.JButton btnGuardar;
    private javax.swing.JButton btnVerComentarios;
    private javax.swing.JComboBox cbEstado;
    private javax.swing.JComboBox cbReunion;
    private javax.swing.JComboBox cbUsuario;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JScrollPane jScrollPane2;
    private javax.swing.JScrollPane jScrollPane3;
    private javax.swing.JLabel lblComentario;
    private javax.swing.JLabel lblComentariosAgregados;
    private javax.swing.JLabel lblDescripcion;
    private javax.swing.JLabel lblEstado;
    private javax.swing.JLabel lblFechaVencimiento;
    private javax.swing.JLabel lblNombre;
    private javax.swing.JLabel lblResultadoComentario;
    private javax.swing.JLabel lblUsuario;
    private javax.swing.JLabel lbl_proyecto;
    private javax.swing.JFormattedTextField txtFechaVen;
    private javax.swing.JTextField txtNombre;
    private javax.swing.JTextField txtProyecto;
    private javax.swing.JTextArea txtaColeccion;
    private javax.swing.JTextArea txtaComentario;
    private javax.swing.JTextArea txtaDescripcion;
    // End of variables declaration//GEN-END:variables
}
